import Vue from 'vue'
import VueRouter from 'vue-router'
import { getToken } from '@/utils/storage'
import { Toast } from 'vant'

// 引入组件 同步引入
// import Login from '@/views/Login'
// import Register from '@/views/Register'
// import Layout from '@/views/Layout'
// import Detail from '@/views/Detail'
// import Article from '@/views/Article'
// import Collect from '@/views/Collect'
// import Like from '@/views/Like'
// import User from '@/views/User'
// 异步加载组件
// shift + 左右 选中一个字母
// ctrl + 左右 光标跳过一个单词
// end 跳到行尾
// home 跳到行首
// pgup 上一页
// pgdown 下一页
// 都可以排列组合
const Login = () => import('@/views/Login')
const Register = () => import('@/views/Register')
const Layout = () => import('@/views/Layout')
const Detail = () => import('@/views/Detail')
const Article = () => import('@/views/Article')
const Collect = () => import('@/views/Collect')
const Like = () => import('@/views/Like')
const User = () => import('@/views/User')

Vue.use(VueRouter)

const router = new VueRouter({
  routes: [
    { path: '/register', component: Register },
    { path: '/login', component: Login },
    { path: '/detail/:id', component: Detail },
    {
      path: '/',
      component: Layout,
      redirect: '/article',
      children: [
        { path: '/article', component: Article },
        { path: '/collect', component: Collect },
        { path: '/like', component: Like },
        { path: '/user', component: User }
      ]
    }
  ]
})

// 白名单
const whiteList = ['/login', '/register']

// 全局前置守卫
// 作用: 每次页面跳转时触发, 在进入目标页面前拦截
// 一旦加了守卫, 若守卫没有放行, 则路由系统瘫痪
// 参数1: to    到哪里去
// 参数2: from  从哪里来
// 参数3: next  是否放行, 它是一个函数, 直接调用不传参表示放行, 调用传入 false 表示不放行, 调用传入路径, 表示强行导航到指定的位置
router.beforeEach((to, from, next) => {
  // 导航守卫的代码切忌写的花里胡哨, 因为导航守卫不管是哪个分支, 最终一定要有放行或不放行的决策
  // console.log(to.path)
  // 先判断有没有 token
  const token = getToken()
  if (token) {
    // 有 token 直接放行
    next()
  } else {
    // 如果没有 token 就判断是否在白名单
    if (whiteList.includes(to.path)) {
      // 在白名单就放行
      next()
    } else {
      // 不在白名单就拦截到登录页
      next('/login')
      Toast.fail('请您先登录哦!')
    }
  }
})

export default router
